package cn.cdeden.resource.service.impl;

import cn.cdeden.common.core.utils.MapstructUtils;
import cn.cdeden.common.oss.entity.UploadResult;
import cn.cdeden.resource.api.domain.RemoteOssUpload;
import cn.cdeden.resource.unified.domain.dto.SliceFileUploadDto;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import cn.cdeden.resource.domain.vo.SysOssSliceVo;
import cn.cdeden.resource.domain.SysOssSlice;
import cn.cdeden.resource.mapper.SysOssSliceMapper;
import cn.cdeden.resource.service.ISysOssSliceService;

import java.util.HashMap;
import java.util.Map;

/**
 * 文件分片上传列处理Service业务层处理
 *
 * @author Yu.
 * @date 2024-12-22
 */
@RequiredArgsConstructor
@Service
public class SysOssSliceServiceImpl extends ServiceImpl<SysOssSliceMapper, SysOssSlice> implements ISysOssSliceService {

//    private final SysOssSliceMapper baseMapper;

//    /**
//     * 查询文件分片上传列处理
//     *
//     * @param sliceId 主键
//     * @return 文件分片上传列处理
//     */
//    @Override
//    public SysOssSliceVo queryById(Long sliceId){
//        return baseMapper.selectVoById(sliceId);
//    }
//
//    /**
//     * 分页查询文件分片上传列处理列表
//     *
//     * @param bo        查询条件
//     * @param pageQuery 分页参数
//     * @return 文件分片上传列处理分页列表
//     */
//    @Override
//    public TableDataInfo<SysOssSliceVo> queryPageList(SysOssSliceBo bo, PageQuery pageQuery) {
//        LambdaQueryWrapper<SysOssSlice> lqw = buildQueryWrapper(bo);
//        Page<SysOssSliceVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
//        return TableDataInfo.build(result);
//    }
//
//    /**
//     * 查询符合条件的文件分片上传列处理列表
//     *
//     * @param bo 查询条件
//     * @return 文件分片上传列处理列表
//     */
//    @Override
//    public List<SysOssSliceVo> queryList(SysOssSliceBo bo) {
//        LambdaQueryWrapper<SysOssSlice> lqw = buildQueryWrapper(bo);
//        return baseMapper.selectVoList(lqw);
//    }
//
//    private LambdaQueryWrapper<SysOssSlice> buildQueryWrapper(SysOssSliceBo bo) {
//        Map<String, Object> params = bo.getParams();
//        LambdaQueryWrapper<SysOssSlice> lqw = Wrappers.lambdaQuery();
//        lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOssSlice::getFileName, bo.getFileName());
//        lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOssSlice::getOriginalName, bo.getOriginalName());
//        lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOssSlice::getFileSuffix, bo.getFileSuffix());
//        lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOssSlice::getService, bo.getService());
//        lqw.eq(StringUtils.isNotBlank(bo.getModuleType()), SysOssSlice::getModuleType, bo.getModuleType());
//        lqw.eq(StringUtils.isNotBlank(bo.getFileMd5()), SysOssSlice::getFileMd5, bo.getFileMd5());
//        lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssSlice::getBucketName, bo.getBucketName());
//        lqw.eq(bo.getFileSize() != null, SysOssSlice::getFileSize, bo.getFileSize());
//        lqw.eq(bo.getPartSize() != null, SysOssSlice::getPartSize, bo.getPartSize());
//        lqw.eq(StringUtils.isNotBlank(bo.getInfo()), SysOssSlice::getInfo, bo.getInfo());
//        lqw.eq(StringUtils.isNotBlank(bo.getState()), SysOssSlice::getState, bo.getState());
//        lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), SysOssSlice::getRemarks, bo.getRemarks());
//        return lqw;
//    }
//

    /**
     * 新增文件分片上传列处理
     *
     * @param upload    创建分片的信息
     * @param configKey 储存的服务商
     * @param uploadDto 文件上传的信息
     * @param ossUpload
     * @return cn.cdeden.resource.domain.vo.SysOssSliceVo
     * @author Yu.
     * @Date 2024/12/22 15:44
     **/
    @Override
    public SysOssSliceVo insertByUpload(UploadResult upload, String configKey, SliceFileUploadDto uploadDto, RemoteOssUpload ossUpload) {
        long fileSize = uploadDto.getFileSize();
        long partSize = uploadDto.getPartSize();
        JSONObject jsonInfo = new JSONObject();
        jsonInfo.put("ossUpload", ossUpload);
        jsonInfo.put("uploadDto", uploadDto.getInfo());
        int partNumber = (int) ((fileSize + partSize - 1) / partSize); //计算总分片数量
        SysOssSlice build = SysOssSlice.builder()
            .fileName(upload.getFilename())
            .originalName(uploadDto.getFileName())
            .fileSuffix(uploadDto.getSuffix())
            .service(configKey)
            .moduleType(uploadDto.getType())
            .bucketName(upload.getBucketName())
            .fileSize(fileSize)
            .partSize(partSize)
            .fileMd5(upload.getFileMd5())
            .partNumber(partNumber)
            .remarks(uploadDto.getRemarks())
            .eTag(upload.getETag())
            .info(jsonInfo.toJSONString())
            .state("0")  //0 上传中
            .build();
        boolean b = baseMapper.insert(build) > 0;
        return MapstructUtils.convert(build, SysOssSliceVo.class);
    }
//
//    /**
//     * 修改文件分片上传列处理
//     *
//     * @param bo 文件分片上传列处理
//     * @return 是否修改成功
//     */
//    @Override
//    public Boolean updateByBo(SysOssSliceBo bo) {
//        SysOssSlice update = MapstructUtils.convert(bo, SysOssSlice.class);
//        validEntityBeforeSave(update);
//        return baseMapper.updateById(update) > 0;
//    }
//
//    /**
//     * 保存前的数据校验
//     */
//    private void validEntityBeforeSave(SysOssSlice entity){
//        //TODO 做一些数据校验,如唯一约束
//    }
//
//    /**
//     * 校验并批量删除文件分片上传列处理信息
//     *
//     * @param ids     待删除的主键集合
//     * @param isValid 是否进行有效性校验
//     * @return 是否删除成功
//     */
//    @Override
//    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
//        if(isValid){
//            //TODO 做一些业务上的校验,判断是否需要校验
//        }
//        return baseMapper.deleteByIds(ids) > 0;
//    }
}
